# 返回码定义规则：
# 规则1：开发人员的环境异常或者代码逻辑错误，可以通过优化环境或代码逻辑的方式解决问题，此时返回码定义为：1XXXXX。
# 规则2：资源不足（Stream、内存等）、开发人员编程时使用的的接口或参数与当前硬件不匹配，可以通过在编程时合理使用资源的方式解决，此时返回码定义为：2XXXXX。
# 规则3：业务功能异常，比如队列满、队列空等，此时返回码定义为3XXXXX。
# 规则4：软硬件内部异常，包括软件内部错误、Device执行失败等，用户无法解决问题，需要将问题反馈给华为的，此时返回码定义为：5XXXXX。
# 规则5：无法识别的错误，当前都映射为500000。

acl_error = {
    0: "0 执行成功",
    100000: "100000 参数校验失败  [可能原因]:请检查接口的入参值是否正确",
    100001: "100001 ACL未初始化  [可能原因]:请检查是否已调用acl.init接口进行初始化, 请确保已调用acl.init接口, 且在其它pyACL接口之前调用。请检查是否已调用对应功能的初始化接口, 例如初始化Dump的acl.mdl.init_dump接口、初始化Profiling的acl.prof.init接口。",
    100002: "100002 重复初始化或重复加载  [可能原因]:请检查是否调用对应的接口重复初始化或重复加载",
    100003: "100003 无效的文件  [可能原因]:请检查文件是否存在、文件是否能被访问等",
    100004: "100004 写文件失败  [可能原因]:请检查文件路径是否存在、文件是否有写权限等",
    100005: "100005 无效的文件大小  [可能原因]:请检查文件大小是否符合接口要求",
    100006: "100006 解析文件失败  [可能原因]:请检查文件内容是否合法",
    100007: "100007 文件缺失参数  [可能原因]:请检查文件内容是否完整",
    100008: "100008 文件参数无效  [可能原因]:请检查文件中参数值是否正确",
    100009: "100009 无效的Dump配置  [可能原因]:请检查acl.init接口的配置文件中的Dump配置是否正确",
    100010: "100010 无效的Profiling配置  [可能原因]:请检查Profiling配置是否正确",
    100011: "100011 无效的模型ID  [可能原因]:请检查模型ID是否正确、模型是否正确加载",
    100012: "100012 反序列化模型失败  [可能原因]:模型可能与当前版本不匹配",
    100013: "100013 解析模型失败  [可能原因]:模型可能与当前版本不匹配",
    100014: "100014 读取模型失败  [可能原因]:请检查模型文件是否存在、模型文件是否能被访问等",
    100015: "100015 无效的模型大小  [可能原因]:模型文件无效",
    100016: "100016 模型缺少参数  [可能原因]:模型可能与当前版本不匹配",
    100017: "100017 模型的输入不匹配  [可能原因]:请检查模型的输入是否正确",
    100018: "100018 模型的输出不匹配  [可能原因]:请检查模型的输出是否正确",
    100019: "100019 非动态模型  [可能原因]:请检查当前模型是否支持动态场景",
    100020: "100020 单算子类型不匹配  [可能原因]:请检查算子类型是否正确",
    100021: "100021 单算子的输入不匹配  [可能原因]:请检查算子的输入是否正确",
    100022: "100022 单算子的输出不匹配  [可能原因]:请检查算子的输出是否正确",
    100023: "100023 单算子的属性不匹配  [可能原因]:请检查算子的属性是否正确",
    100024: "100024 单算子未找到  [可能原因]:请检查算子类型是否支持",
    100025: "100025 单算子加载失败  [可能原因]:模型可能与当前版本不匹配",
    100026: "100026 不支持的数据类型  [可能原因]:请检查数据类型是否存在或当前是否支持",
    100027: "100027 Format不匹配  [可能原因]:请检查Format是否正确",
    100028: "100028 使用二进制选择方式编译算子接口时，算子未注册选择器  [可能原因]:请检查是否调用acl.op.register_compile_func接口注册算子选择器",
    100029: "100029 编译算子时, 算子Kernel未注册  [可能原因]:请检查是否调用acl.op.create_kernel接口注册算子Kernel",
    100030: "100030 使用二进制选择方式编译算子接口时，算子重复注册  [可能原因]:请检查是否重复调用acl.op.register_compile_func接口注册算子选择器",
    100031: "100031 编译算子时, 算子Kernel重复注册  [可能原因]:请检查是否重复调用acl.op.create_kernel接口注册算子Kernel",
    100032: "100032 无效的队列ID  [可能原因]:请检查队列ID是否正确",
    100033: "100033 重复订阅  [可能原因]:请检查针对同一个Stream",
    100034: "100034 Stream未订阅  [可能原因]:请检查是否已调用acl.rt.subscribe_report接口",
    100035: "100035 线程未订阅  [可能原因]:请检查是否已调用acl.rt.subscribe_report接口",
    100036: "100036 等待callback超时  [可能原因]:请检查是否已调用acl.rt.launch_callback接口下发callback任务。请检查acl.rt.process_report接口中超时时间是否合理。请检查callback任务是否已经处理完成, 如果已处理完成, 但还调用acl.rt.process_report接口, 则需优化代码逻辑。",
    100037: "100037 重复去初始化  [可能原因]:请检查是否重复调用acl.finalize接口进行去初始化",
    100038: "100038 静态AIPP配置信息不存在  [可能原因]:调用acl.mdl.get_first_aipp_info接口时, 请传入正确的index值",
    100039: "100039 运行应用前配置的动态库路径是编译桩的路径，不是正确的动态库路径  [可能原因]:请检查动态库路径的配置，确保使用运行模式的动态库",
    100042: "100042 已存在采集Profiling数据的任务  [可能原因]:请检查在调用acl.prof.init接口、acl.prof.start接口、acl.prof.stop接口、acl.prof.finalize接口配置Profiling性能数据采集信息前, 是否已调用acl.prof.init接口配置Profiling信息, 如是, 请调整代码逻辑, 保留一种方式配置Profiling信息即可。请检查是否对同一个Device重复下发了多次Profiling配置, 请参考Profiling pyACL API(通过Profiling pyACL API采集并落盘性能数据)中的接口调用要求、接口调用顺序调整代码逻辑。",
    100043: "100043 未使用acl.prof.init接口先进行Profiling初始化  [可能原因]:请检查采集Profiling数据的接口调用顺序",
    100044: "100044 已存在获取Dump数据的任务  [可能原因]:请检查在调用acl.mdl.init_dump接口、acl.mdl.set_dump接口、acl.mdl.finalize_dump接口配置Dump信息前, 是否已调用acl.init接口配置Dump信息, 如是, 请调整代码逻辑, 保留一种方式配置Dump信息即可",
    100045: "100045 未使用acl.mdl.init_dump接口先进行Dump初始化  [可能原因]:请检查获取Dump数据的接口调用顺序, 参考acl.mdl.init_dump接口处的说明",
    148046: "148046 重复订阅同一个模型  [可能原因]:请检查接口调用顺序, 参考Profiling pyACL API(通过Profiling pyACL API采集并落盘性能数据)中的说明",
    148047: "148047 采集性能数据的接口调用冲突  [可能原因]:两种方式的Profiling性能数据采集接口不能交叉调用, acl.prof.init接口和acl.prof.finalize接口之间不能调用acl.prof.model_subscribe接口、acl.prof.get_op_*接口、acl.prof.model_un_subscribe接口, acl.prof.model_subscribe接口和acl.prof.model_un_subscribe接口之间不能调用acl.prof.init接口、acl.prof.start接口、acl.prof.stop接口、acl.prof.finalize接口",
    148048: "148048 无效的算子缓存信息老化配置  [可能原因]:请检查算子缓存信息老化配置, 参考acl.init处的配置说明及示例",
    148049: "148049 没有设置ASCEND_OPP_PATH环境变量, 或该环境变量的值设置错误  [可能原因]:请检查是否设置ASCEND_OPP_PATH环境变量, 且该环境变量的值是否为opp软件包的安装路径",
    148050: "148050 算子不支持动态Shape  [可能原因]:请检查单算子模型文件中该算子的Shape是否为动态, 如果是动态的, 需要修改为固定Shape。请检查编译算子时, aclTensorDesc的Shape是否为动态, 如果是动态的, 需要按照固定Shape重新创建aclTensorDesc。",
    148051: "148051 相关的资源尚未释放  [可能原因]:在销毁通道描述信息时，如果相关的通道尚未销毁则返回此错误码。请检查与此通道描述信息相关联的通道是否被销毁",
    148052: "148052 JPEGD功能不支持的输入图片编码格式(例如算术编码、渐进式编码等)  [可能原因]:实现JPEGD图片解码功能时, 仅支持Huffman编码, 压缩前的原图像色彩空间为YUV, 像素的各分量比例为4:4:4或4:2:2或4:2:0或4:0:0或4:4:0, 不支持算术编码、不支持渐进JPEG格式、不支持JPEG2000格式",
    200000: "200000 申请内存失败  [可能原因]:请检查硬件环境上的内存剩余情况",
    200001: "200001 接口不支持  [可能原因]:请检查调用的接口当前是否支持",
    200002: "200002 无效的Device  [可能原因]:请检查Device是否存在",
    200003: "200003 内存地址未对齐  [可能原因]:请检查内存地址是否符合接口要求",
    200004: "200004 资源不匹配  [可能原因]:请检查调用接口时, 是否传入正确的Stream、Context等资源",
    200005: "200005 无效的资源句柄  [可能原因]:请检查调用接口时, 传入的Stream、Context等资源是否已被销毁或占用",
    200006: "200006 特性不支持  [可能原因]:请根据日志报错排查问题",
    200007: "200007 下发了不支持的Profiling配置  [可能原因]:请参见acl.prof.create_config中的说明检查Profiling的配置是否正确",
    300000: "300000 超出存储上限  [可能原因]:请检查硬件环境上的存储剩余情况",
    500000: "500000 未知内部错误  [可能原因]:请根据日志报错排查问题",
    500001: "500001 系统内部ACL的错误  [可能原因]:请根据日志报错排查问题",
    500002: "500002 系统内部GE的错误  [可能原因]:请根据日志报错排查问题",
    500003: "500003 系统内部RUNTIME的错误  [可能原因]:请根据日志报错排查问题",
    500004: "500004 系统内部DRV(Driver)的错误  [可能原因]:请根据日志报错排查问题",
    500005: "500005 Profiling相关错误  [可能原因]:请根据日志报错排查问题",

    # 内部RUNTIME的返回码列表
    107000: "107000 [RUNTIME]参数校验失败  [可能原因]:请检查接口入参是否正确",
    107001: "107001 [RUNTIME]无效的Device ID  [可能原因]:请检查Device ID是否合法",
    107002: "107002 [RUNTIME]context为空  [可能原因]:请检查是否调用acl.rt.set_context或acl.rt.set_device",
    107003: "107003 [RUNTIME]stream不在当前Context内  [可能原因]:请检查Stream所在的Context与当前Context是否一致",
    107004: "107004 [RUNTIME]model不在当前Context内  [可能原因]:请检查加载的模型与当前Context是否一致",
    107005: "107005 [RUNTIME]stream不在当前model内  [可能原因]:请检查Stream是否绑定过该模型",
    107006: "107006 [RUNTIME]event时间戳无效  [可能原因]:请检查Event是否创建",
    107007: "107007 [RUNTIME]event时间戳反转  [可能原因]:请检查Event是否创建",
    107008: "107008 [RUNTIME]内存地址未对齐  [可能原因]:请检查所申请的内存地址是否对齐，详细内存申请接口的约束请参见内存管理",
    107009: "107009 [RUNTIME]打开文件失败  [可能原因]:请检查文件是否存在",
    107010: "107010 [RUNTIME]写文件失败  [可能原因]:请检查文件是否存在或者是否具备写权限",
    107011: "107011 [RUNTIME]stream未订阅或重复订阅  [可能原因]:请检查当前stream是否订阅或重复订阅",
    107012: "107012 [RUNTIME]线程未订阅或重复订阅  [可能原因]:请检查当前线程是否订阅或重复订阅",
    107013: "107013 [RUNTIME]未设置Group  [可能原因]:-",
    107014: "107014 [RUNTIME]未创建对应的Group  [可能原因]:请检查调用接口时设置的Group ID是否在支持的范围内, Group ID的取值范围:[0, (Group数量-1)]",
    107015: "107015 [RUNTIME]该callback对应的Stream未注册到线程  [可能原因]:请检查stream是否已经注册到线程, 检查是否调用acl.rt.subscribe_report接口",
    107016: "107016 [RUNTIME]无效的内存类型  [可能原因]:请检查内存类型是否合法",
    107017: "107017 [RUNTIME]无效的资源句柄  [可能原因]:检查对应输入和使用的参数是否正确",
    107018: "107018 [RUNTIME]申请使用的内存类型不正确  [可能原因]:检查对应输入和使用的内存类型是否正确",
    107019: "107019 [RUNTIME]执行任务超时  [可能原因]:请尝试重新执行下发任务的接口",
    207000: "207000 [RUNTIME]特性不支持  [可能原因]:请根据日志报错排查问题",
    207001: "207001 [RUNTIME]内存申请失败  [可能原因]:请检查硬件环境上的存储剩余情况",
    207002: "207002 [RUNTIME]内存释放失败  [可能原因]:请根据日志报错排查问题",
    207003: "207003 [RUNTIME]aicore算子运算溢出  [可能原因]:请检查对应的aicore算子运算是否有溢出",
    207004: "207004 [RUNTIME]Device不可用  [可能原因]:请检查Device是否正常运行",
    207005: "207005 [RUNTIME]内存申请失败  [可能原因]:请检查硬件环境上的存储剩余情况",
    207006: "207006 [RUNTIME]没有操作权限  [可能原因]:请检查运行应用的用户权限是否正确",
    207007: "207007 [RUNTIME]Event资源不足  [可能原因]:请参考acl.rt.create_event接口处的说明检查Event数量是否符合要求",
    207008: "207008 [RUNTIME]Stream资源不足  [可能原因]:请参考acl.rt.create_stream接口处的说明检查Stream数量是否符合要求",
    207009: "207009 [RUNTIME]系统内部Notify资源不足  [可能原因]:数据预处理的并发任务太多或模型推理时消耗资源太多，建议尝试减少并发任务或卸载部分模型",
    207010: "207010 [RUNTIME]模型资源不足  [可能原因]:建议卸载部分模型",
    207011: "207011 [RUNTIME]Runtime内部资源不足  [可能原因]:请根据日志报错排查问题",
    207012: "207012 [RUNTIME]队列数目超出上限  [可能原因]:请销毁不需要的队列之后再创建新的队列",
    207013: "207013 [RUNTIME]队列为空  [可能原因]:不能从空队列中获取数据，请先向队列中添加数据，再获取",
    207014: "207014 [RUNTIME]队列已满  [可能原因]:不能向已满的队列中添加数据，请先从队列中获取数据，再添加",
    207015: "207015 [RUNTIME]队列重复初始化  [可能原因]:建议初始化一次队列即可，不要重复初始化",
    507000: "507000 [RUNTIME]Host上的runtime模块内部错误  [可能原因]:请根据日志报错排查问题",
    507001: "507001 [RUNTIME]Device上的task scheduler模块内部错误  [可能原因]:请根据日志报错排查问题",
    507002: "507002 [RUNTIME]stream上的task数量满  [可能原因]:请根据日志报错排查问题",
    507003: "507003 [RUNTIME]stream上的task数量为空  [可能原因]:请根据日志报错排查问题",
    507004: "507004 [RUNTIME]stream上的task未全部执行完成  [可能原因]:请根据日志报错排查问题",
    507005: "507005 [RUNTIME]AI CPU上的task执行完成  [可能原因]:请根据日志报错排查问题",
    507006: "507006 [RUNTIME]event未完成  [可能原因]:请根据日志报错排查问题",
    507007: "507007 [RUNTIME]context释放失败  [可能原因]:请根据日志报错排查问题",
    507008: "507008 [RUNTIME]获取soc version失败  [可能原因]:请根据日志报错排查问题",
    507009: "507009 [RUNTIME]不支持的task类型  [可能原因]:请根据日志报错排查问题",
    507010: "507010 [RUNTIME]task scheduler丢失心跳  [可能原因]:请根据日志报错排查问题",
    507011: "507011 [RUNTIME]模型执行失败  [可能原因]:请根据日志报错排查问题",
    507012: "507012 [RUNTIME]获取task scheduler的消息失败  [可能原因]:请根据日志报错排查问题",
    507013: "507013 [RUNTIME]system dma(Direct Memory Access)硬件执行错误  [可能原因]:请根据日志报错排查问题",
    507014: "507014 [RUNTIME]aicore执行超时  [可能原因]:请根据日志报错排查问题",
    507015: "507015 [RUNTIME]aicore执行异常  [可能原因]:请根据日志报错排查问题",
    507016: "507016 [RUNTIME]aicore trap执行异常  [可能原因]:请根据日志报错排查问题",
    507017: "507017 [RUNTIME]aicpu执行超时  [可能原因]:请根据日志报错排查问题",
    507018: "507018 [RUNTIME]aicpu执行异常  [可能原因]:请根据日志报错排查问题",
    507019: "507019 [RUNTIME]aicpu执行数据dump后未给task scheduler返回响应  [可能原因]:请根据日志报错排查问题",
    507020: "507020 [RUNTIME]aicpu执行模型后未给task scheduler返回响应  [可能原因]:请根据日志报错排查问题",
    507021: "507021 [RUNTIME]profiling功能执行异常  [可能原因]:请根据日志报错排查问题",
    507022: "507022 [RUNTIME]进程间通信异常  [可能原因]:请根据日志报错排查问题",
    507023: "507023 [RUNTIME]模型退出  [可能原因]:请根据日志报错排查问题",
    507024: "507024 [RUNTIME]算子正在去注册  [可能原因]:请根据日志报错排查问题",
    507025: "507025 [RUNTIME]ringbuffer(环形缓冲区)功能未初始化  [可能原因]:请根据日志报错排查问题",
    507026: "507026 [RUNTIME]ringbuffer(环形缓冲区)没有数据  [可能原因]:请根据日志报错排查问题",
    507027: "507027 [RUNTIME]RUNTIME内部的kernel未注册  [可能原因]:请根据日志报错排查问题",
    507028: "507028 [RUNTIME]重复注册RUNTIME内部的kernel  [可能原因]:请根据日志报错排查问题",
    507029: "507029 [RUNTIME]debug功能注册失败  [可能原因]:请根据日志报错排查问题",
    507030: "507030 [RUNTIME]debug功能去注册失败  [可能原因]:请根据日志报错排查问题",
    507031: "507031 [RUNTIME]标签不在当前Context内  [可能原因]:请根据日志报错排查问题",
    507032: "507032 [RUNTIME]注册的program数量超过限制  [可能原因]:请根据日志报错排查问题",
    507033: "507033 [RUNTIME]Device启动失败  [可能原因]:请根据日志报错排查问题",
    507034: "507034 [RUNTIME]vector core执行超时  [可能原因]:请根据日志报错排查问题",
    507035: "507035 [RUNTIME]vector core执行异常  [可能原因]:请根据日志报错排查问题",
    507036: "507036 [RUNTIME]vector core trap执行异常  [可能原因]:请根据日志报错排查问题",
    507037: "507037 [RUNTIME]Runtime内部资源申请异常  [可能原因]:请根据日志报错排查问题",
    507038: "507038 [RUNTIME]die模式修改异常, 不能修改die模式  [可能原因]:请根据日志报错排查问题",
    507039: "507039 [RUNTIME]单die模式不能指定die  [可能原因]:请根据日志报错排查问题",
    507040: "507040 [RUNTIME]指定die id错误  [可能原因]:请根据日志报错排查问题",
    507041: "507041 [RUNTIME]die模式没有设置  [可能原因]:请根据日志报错排查问题",
    507042: "507042 [RUNTIME]aicore trap读越界异常  [可能原因]:请根据日志报错排查问题",
    507043: "507043 [RUNTIME]aicore trap写越界异常  [可能原因]:请根据日志报错排查问题",
    507044: "507044 [RUNTIME]vector core trap读越界异常  [可能原因]:请根据日志报错排查问题",
    507045: "507045 [RUNTIME]vector core trap写越界异常  [可能原因]:请根据日志报错排查问题",
    507899: "507899 [RUNTIME]Driver模块内部错误  [可能原因]:请根据日志报错排查问题",
    507900: "507900 [RUNTIME]AI CPU模块内部错误  [可能原因]:请根据日志报错排查问题",
    507901: "507901 [RUNTIME]内部HDC(Host Device Communication)会话链接断开  [可能原因]:请根据日志报错排查问题",
    
    # 内部GE返回码
    145000: "145000 [GE]参数校验失败  [可能原因]:请检查接口的入参值是否正确",
    145001: "145001 [GE]未初始化  [可能原因]:请检查是否已调用acl.init接口进行初始化, 请确保已调用acl.init接口, 且在其它pyACL接口之前调用。请检查是否已调用对应功能的初始化接口, 例如初始化Dump的acl.mdl.init_dump接口、初始化Profiling的acl.prof.init接口",
    145002: "145002 [GE]无效的模型路径  [可能原因]:请检查模型路径是否正确",
    145003: "145003 [GE]无效的模型ID  [可能原因]:请检查模型ID是否正确、模型是否正确加载",
    145006: "145006 [GE]无效的模型大小  [可能原因]:无效的模型大小",
    145007: "145007 [GE]无效的模型内存地址  [可能原因]:请检查模型地址是否有效",
    145008: "145008 [GE]无效的队列ID  [可能原因]:无效的队列 ID",
    145009: "145009 [GE]重复初始化或重复加载  [可能原因]:请检查是否调用对应的接口重复初始化或重复加载",
    145011: "145011 [GE]无效的动态分档输入地址  [可能原因]:请检查动态分档输入地址",
    145012: "145012 [GE]无效的动态分档输入长度  [可能原因]:请检查动态分档输入长度",
    145013: "145013 [GE]无效的动态分档Batch大小  [可能原因]:请检查动态分档Batch大小",
    145014: "145014 [GE]无效的AIPP Batch数  [可能原因]:请检查AIPP Batch数是否正确",
    145015: "145015 [GE]IPP配置不存在  [可能原因]:请检查AIPP是否配置",
    145016: "145016 [GE]无效的AIPP模式  [可能原因]:请检查模型转换时配置的AIPP模式是否正确",
    145017: "145017 [GE]无效的任务类型  [可能原因]:请检查算子类型是否正确",
    145018: "145018 [GE]无效的算子类型  [可能原因]:请检查算子类型是否正确",
    145019: "145019 [GE]无效的so文件, 包括so文件的路径层级太深、so文件被误删除等情况  [可能原因]:请检查运行应用前配置的环境变量LD_LIBRARY_PATH是否正确, 详细描述请参见编译运行处的操作指导",
    145020: "145020 [GE]无效的format  [可能原因]:请检查Tensor数据的format是否有效",
    145021: "145021 [GE]无效的shape  [可能原因]:请检查Tensor数据的shape是否有效",
    145022: "145022 [GE]无效的数据类型  [可能原因]:请检查Tensor数据的数据类型是否有效",
    245000: "245000 [GE]申请内存失败  [可能原因]:请检查硬件环境上的内存剩余情况",
    245001: "245001 [GE]内存初始化、内存复制操作失败  [可能原因]:请检查内存地址是否正确、硬件环境上的内存是否足够等",
    245002: "245002 [GE]申请Device内存失败  [可能原因]:Device内存已用完, 无法继续申请, 请释放部分Device内存, 再重新尝试",
    545000: "545000 [GE]未知内部错误  [可能原因]:请根据日志报错排查问题",
    545001: "545001 [GE]系统内部加载模型失败  [可能原因]:请根据日志报错排查问题",
    545002: "545002 [GE]系统内部加载模型失败  [可能原因]:请根据日志报错排查问题",
    545003: "545003 [GE]系统内部加载模型权值失败  [可能原因]:请根据日志报错排查问题",
    545004: "545004 [GE]系统内部加载模型任务失败  [可能原因]:请根据日志报错排查问题",
    545005: "545005 [GE]系统内部加载模型算子失败  [可能原因]:请根据日志报错排查问题",
    545006: "545006 [GE]系统内释放模型空间失败  [可能原因]:请根据日志报错排查问题",
    545007: "545007 [GE]系统内命令操作失败  [可能原因]:请根据日志报错排查问题",
    545008: "545008 [GE]系统内获取张量数据失败  [可能原因]:请根据日志报错排查问题",
    545009: "545009 [GE]系统内卸载模型空间失败  [可能原因]:请根据日志报错排查问题",

}